O problema de negócio¶


OBS: Todo o contexto e perguntas são completamente fictícios!

Depois de uma boa preparação, prestei o processo seletivo para trabalhar na renomada empresa de aluguel de espaços, chamada ErBnB. Após a primeira semana de recepção, juntei-me ao time de Cientistas de Dados da empresa com foco em expansão, na cidade de Nova York, Estados Unidos. Esse projeto de expansão é muito importante para o ErBnB, mas também é muito arriscado. Qualquer decisão errada por parte do CEO pode levar a empresa a ter um prejuízo enorme.

Para diminuir o risco desse projeto, o meu chefe pediu para que eu auxiliasse o CEO da empresa, utilizando dados para responder algumas perguntas, que o ajudarão a tomar melhores decisões comerciais e de marketing.

  • As perguntas foram as seguintes:

    • 1 - Qual o valor médio do aluguel na cidade de Nova York?
    • 2 - Quais os nomes das regiões que existem na cidade de Nova York?
    • 3 - Qual o valor do aluguel diário mais caro da cidade de Nova York?
    • 4 - Quais são as categorias de imóveis que estão cadastradas dentro da base de dados da cidade de Nova York?
    • 5 - Existem quantos usuários (Hosts) únicos cadastrados dentro da base de dados da cidade de Nova York?
    • 6 - Como é a variação do preços dos imóveis em NY?
    • 7 - Existem mais imóveis baratos ou caros?
    • 8 - Qual a distribuição do número de Reviews? Existem imóveis com muitos e outro com poucos reviews?
    • 9 - Qual é o valor do aluguel (diária) mais caro de cada região da base de dados da cidade de NY? (Apenas dos imóveis disponíveis para alugar)
    • 10 - Conseguimos saber onde estão localizados os imóveis com o valor do aluguel mais caro, na cidade de NY?
    • 11 - Conseguimos saber onde estão localizados os imóveis pelo seu tipo?

Antes de dar início à resolução das questões levantadas pelo CEO, fiz um planejamento em 3 passos simples:

  • Produto final:
    • Será enviado um email para o CEO com as respostas e arquivo HTML para viualizar os mapas solicitados.

  • Processo:
    • Coletar um conjunto de dados e fazer a manipulação destes;

  • Ferramentas:
    • Python;
    • Ferramentas estatísticas;
    • Jupyter Notebook.

Início da análise exploratória¶

In [1]:
# Importando as bibliotecas a serem utilizadas

import pandas as pd
import numpy as np
import plotly.express as px #plotagem de gráficos
import folium #plotagem de mapas
In [2]:
# Carregando o arquivo csv

df = pd.read_csv('./archive/AB_NYC_2019.csv')

Metadados¶

Coluna Descrição
id Identificador do registro na base de dados
name Nome do Anúncio na plataforma do Airbnb
host_id Identificador do Host (Dono do Imóvel)
host_name Nome do Host
neighbourhood_group Região da Cidade de Nova York
neighbourhood Bairro (Está dentro de uma das Regiões)
latitude Ponto Geográfico de Latitude
longitude Ponto Geográfico de Longitude
room_type Tipo da Locação (Quarto, Casa inteira, etc)
price Preço do aluguel (diária)
minimum_nights Diárias Mínimas para Locação
number_of_reviews Quantidade de Avaliações
last_review Data da última avaliação feita
reviews_per_month Quantidade de Revisões Mensais
calculated_host_listings_coun t Quantidade de Anúncios do Host do Imóvel
availability_365 Tempo (dias) em que o anúncio está disponível
In [3]:
# Número de linhas e colunas(Dimensão do dataset)

df.shape
Out[3]:
(48895, 16)
In [4]:
# Primeiras linhas do dataset

df.head()
Out[4]:
id name host_id host_name neighbourhood_group neighbourhood latitude longitude room_type price minimum_nights number_of_reviews last_review reviews_per_month calculated_host_listings_count availability_365
0 2539 Clean & quiet apt home by the park 2787 John Brooklyn Kensington 40.64749 -73.97237 Private room 149 1 9 2018-10-19 0.21 6 365
1 2595 Skylit Midtown Castle 2845 Jennifer Manhattan Midtown 40.75362 -73.98377 Entire home/apt 225 1 45 2019-05-21 0.38 2 355
2 3647 THE VILLAGE OF HARLEM....NEW YORK ! 4632 Elisabeth Manhattan Harlem 40.80902 -73.94190 Private room 150 3 0 NaN NaN 1 365
3 3831 Cozy Entire Floor of Brownstone 4869 LisaRoxanne Brooklyn Clinton Hill 40.68514 -73.95976 Entire home/apt 89 1 270 2019-07-05 4.64 1 194
4 5022 Entire Apt: Spacious Studio/Loft by central park 7192 Laura Manhattan East Harlem 40.79851 -73.94399 Entire home/apt 80 10 9 2018-11-19 0.10 1 0
In [5]:
# Tipo de dados de cada coluna

df.dtypes
Out[5]:
id                                  int64
name                               object
host_id                             int64
host_name                          object
neighbourhood_group                object
neighbourhood                      object
latitude                          float64
longitude                         float64
room_type                          object
price                               int64
minimum_nights                      int64
number_of_reviews                   int64
last_review                        object
reviews_per_month                 float64
calculated_host_listings_count      int64
availability_365                    int64
dtype: object
In [6]:
# Número de dados falantes de cada coluna

df.isna().sum()
Out[6]:
id                                    0
name                                 16
host_id                               0
host_name                            21
neighbourhood_group                   0
neighbourhood                         0
latitude                              0
longitude                             0
room_type                             0
price                                 0
minimum_nights                        0
number_of_reviews                     0
last_review                       10052
reviews_per_month                 10052
calculated_host_listings_count        0
availability_365                      0
dtype: int64
In [7]:
# Informações gerais sobre o dataset

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 48895 entries, 0 to 48894
Data columns (total 16 columns):
 #   Column                          Non-Null Count  Dtype  
---  ------                          --------------  -----  
 0   id                              48895 non-null  int64  
 1   name                            48879 non-null  object 
 2   host_id                         48895 non-null  int64  
 3   host_name                       48874 non-null  object 
 4   neighbourhood_group             48895 non-null  object 
 5   neighbourhood                   48895 non-null  object 
 6   latitude                        48895 non-null  float64
 7   longitude                       48895 non-null  float64
 8   room_type                       48895 non-null  object 
 9   price                           48895 non-null  int64  
 10  minimum_nights                  48895 non-null  int64  
 11  number_of_reviews               48895 non-null  int64  
 12  last_review                     38843 non-null  object 
 13  reviews_per_month               38843 non-null  float64
 14  calculated_host_listings_count  48895 non-null  int64  
 15  availability_365                48895 non-null  int64  
dtypes: float64(3), int64(7), object(6)
memory usage: 6.0+ MB
In [8]:
# Excluindo linhas com dados faltantes 

df1 = df.dropna()
In [9]:
# Verificando a dimensão do dataset

df1.shape
Out[9]:
(38821, 16)

Solucionando as perguntas do CEO¶

1 - Qual o valor médio do aluguel na cidade de Nova York?

In [10]:
# Atribuindo a coluna price a uma variável

cols = ['price']

# Atribuindo o dataset filtrado a uma variável

mean_price = df1.loc[:, cols]

# Calculando a média

mean_price.mean().round(2)
Out[10]:
price    142.33
dtype: float64

2 - Quais os nomes das regiões que existem na cidade de Nova York?

In [11]:
cols = ['neighbourhood_group']

regiao = df1.loc[:, cols]

# Acessando valores únicos
np.unique(regiao)
Out[11]:
array(['Bronx', 'Brooklyn', 'Manhattan', 'Queens', 'Staten Island'],
      dtype=object)

3 - Qual o valor do aluguel diário mais caro da cidade de Nova York?

In [12]:
cols = ['price']

max_price = df1.loc[:,cols]


# Verificando valor máximo

max_price.max()
Out[12]:
price    10000
dtype: int64

4 - Quais são as categorias de imóveis que estão cadastradas dentro da base de dados da cidade de Nova York?

In [13]:
df1.room_type.unique()
Out[13]:
array(['Private room', 'Entire home/apt', 'Shared room'], dtype=object)

5 - Existem quantos usuários (Hosts) únicos cadastrados dentro da base de dados da cidade de Nova York?

In [14]:
df1.host_id.nunique()
Out[14]:
30232

6 - Como é a variação do preços dos imóveis em NY?

In [15]:
df1.price.std().round(2)
Out[15]:
196.99

7 - Existem mais imóveis baratos ou caros?

In [16]:
px.histogram(df1, 'price', nbins=300)

# Recortando o gráfico com valores menor que US$1000 dólares
px.histogram(df1.loc[df1['price'] < 1000, :], 'price', nbins=300)

8 - Qual a distribuição do número de Reviews? Existem imóveis com muitos e outro com poucos reviews?

In [17]:
px.histogram(df1, 'number_of_reviews', nbins=200)

9 - Qual é o valor do aluguel (diária) mais caro de cada região da base de dados da cidade de NY? (Apenas dos imóveis disponíveis para alugar)

In [18]:
# Remover imóveis com a coluna availability_365 igual a 0

df2 = df1.loc[df1['availability_365'] > 0, :]
In [19]:
cols = ['neighbourhood_group', 'price']

data_plot = df2.loc[:, cols].groupby('neighbourhood_group').max().reset_index()

px.bar(data_plot, x='neighbourhood_group', y='price')

10 - Conseguimos saber onde estão localizados os imóveis com o valor do aluguel mais caro, na cidade de NY?

In [20]:
# Conjunto de dados com as coordenadas

cols = ['neighbourhood_group', 'price', 'latitude', 'longitude']

data_plot = df2.loc[:, cols].groupby('neighbourhood_group').max().reset_index()


# comando para desenhar o mapa

mapa = folium.Map()


# Colocar os pontos de latitude e longitude dentro do mapa

for index, location_info in data_plot.iterrows():
    folium.Marker([location_info['latitude'], location_info['longitude']],
                  popup=location_info['neighbourhood_group']).add_to(mapa)
    
mapa
Out[20]:
Make this Notebook Trusted to load map: File -> Trust Notebook

11 - Conseguimos saber onde estão localizados os imóveis pelo seu tipo?

In [21]:
cols = ['neighbourhood_group', 'room_type', 'latitude', 'longitude']
data_plot = df2.loc[:, cols].sample(120)

# criando nova coluna

data_plot.loc[:, 'color'] = 'NA'

# atribuindo uma cor para cada room type

data_plot.loc[data_plot['room_type'] == 'Private room', 'color'] = 'darkblue'
data_plot.loc[data_plot['room_type'] == 'Entire home/apt', 'color'] = 'darkred'
data_plot.loc[data_plot['room_type'] == 'Shared room', 'color'] = 'gray'

# Desenhando o mapa

mapa = folium.Map()

# Colocando os pontos dentro do mapa

for index, location_info in data_plot.iterrows():
    folium.Marker([location_info['latitude'], 
                   location_info['longitude']], 
                   popup=location_info['neighbourhood_group'],
                   icon=folium.Icon(color=location_info['color'])).add_to(mapa)
    
mapa
Out[21]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Conclusão¶

Tendo feito toda a inferência sobre os dados coletados, cheguei às seguintes respostas:

  • 1 - O valor médio do aluguel na Cidade de NY é de 142.33

  • 2 - Nomes das regiões que existem na Cidade de NY: Bronx, Brooklyn, Manhattan, Queens, Staten Island

  • 3 - O Valor do aluguel diário mais caro na Cidade de NY é de 10.000

  • 4 - As categorias dos imóveis são: Private room, Entire home/apt e Shared room

  • 5 - O número de usuários (Hosts) únicos cadastrados é de 30.232

  • 6 - A variação dos preços dos imóveis em NY é de US196,99 em média

  • 7 - Os imóveis para alugar em NY estão concentrados na faixa de aluguel que varia entre US50 - 99. Existem 13.883 imóveis com esta faixa de valores.

  • 8 - Existem muitos imóveis com poucas avaliações e poucos imóveis com muitas avaliações.

  • 9 - Valor da diária mais cara de cada região(apenas imóveis disponíveis para alugar):
    • A diária mais cara da região do Bronx é US 800;
    • A diária mais cara da região do Brooklyn é US 8000;
    • A diária mais cara da região de Manhattan é US 9999;
    • A diária mais cara da região do Queens é US 2600;
    • A diária mais cara da região de Staten Island é US 625.

  • 10 - vide mapa

  • 11 - vide mapa
O resultado da análise será enviado ao CEO para ajudá-lo a tomar as melhores decisões para este problema.

Fonte de dados utilizada¶

Dataset Kaggle: https://www.kaggle.com/datasets/dgomonov/new-york-city-airbnb-open-data

In [ ]: